package nk;

/**
 * 二进制插入
 */
public class BinInsert {
    /**
     * 给定两个32位整数n和m，同时给定i和j，将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零，且m的二进制位数小于等于i-j+1，
     * 其中二进制的位数从0开始由低到高。
     */
    public static int binInsert(int n, int m, int j, int i) {
        m = m << j;
        // i - j 插入的位置0
        while (i >= j) {
            n = setZeroBit(n,j++);
        }
        n = n | m;
        return n;
    }

    public static int setZeroBit(int num, int n) {
        return ~(1 << (n - 1)) & num;
    }

    public static void main(String[] args) {
        System.out.println(binInsert(1024,19,2,6));
        System.out.println(binInsert(1072,19,2,6));
    }
}
